package com.pucheng.bracelet.app

import android.content.Intent
import androidx.multidex.MultiDex
import cat.ereza.customactivityoncrash.config.CaocConfig
import com.blankj.utilcode.util.CrashUtils
import com.blankj.utilcode.util.LogUtils
import com.blankj.utilcode.util.Utils
import com.kingja.loadsir.callback.SuccessCallback
import com.kingja.loadsir.core.LoadSir
import com.pucheng.bracelet.BuildConfig
import com.pucheng.bracelet.MainActivity
import com.pucheng.bracelet.app.database.AppDatabase
import com.pucheng.bracelet.app.service.NotificationCollectorMonitorService
import com.pucheng.bracelet.app.weight.loadCallBack.EmptyCallback
import com.pucheng.bracelet.app.weight.loadCallBack.ErrorCallback
import com.pucheng.bracelet.app.weight.loadCallBack.LoadingCallback
import com.tencent.bugly.Bugly
import com.tencent.mmkv.MMKV
import me.hgj.jetpackmvvm.base.BaseApp
import me.hgj.jetpackmvvm.ext.util.jetpackMvvmLog
import java.util.*

/**
 * 作者　: hegaojian
 * 时间　: 2019/12/23
 * 描述　:
 */

class App : BaseApp() {

    val database by lazy { AppDatabase.getDatabase() }
    var language:String = "zh"

    companion object {
        lateinit var instance: App
    }

    override fun onCreate() {
        super.onCreate()
        instance = this

        MultiDex.install(this)
        MMKV.initialize(this.filesDir.absolutePath + "/mmkv")
        //界面加载管理 初始化
        LoadSir.beginBuilder()
            .addCallback(LoadingCallback())//加载
            .addCallback(ErrorCallback())//错误
            .addCallback(EmptyCallback())//空
            .setDefaultCallback(SuccessCallback::class.java)//设置默认加载状态页
            .commit()
        //初始化Bugly
        val context = applicationContext
        // 获取当前包名
//        val packageName = context.packageName
        // 获取当前进程名
//        val processName = getProcessName(android.os.Process.myPid())
//        // 设置是否为上报进程
//        val strategy = CrashReport.UserStrategy(context)
//        strategy.isUploadProcess = processName == null || processName == packageName
//        // 初始化Bugly
        Bugly.init(context, if (BuildConfig.DEBUG) "xxx" else "4e11029c98", false)
//        "".logd()
        jetpackMvvmLog = BuildConfig.DEBUG

        //防止项目崩溃，崩溃后打开错误界面
        CaocConfig.Builder.create()
            .backgroundMode(CaocConfig.BACKGROUND_MODE_SILENT) //default: CaocConfig.BACKGROUND_MODE_SHOW_CUSTOM
            .enabled(true)//是否启用CustomActivityOnCrash崩溃拦截机制 必须启用！不然集成这个库干啥？？？
            .showErrorDetails(false) //是否必须显示包含错误详细信息的按钮 default: true
            .showRestartButton(false) //是否必须显示“重新启动应用程序”按钮或“关闭应用程序”按钮default: true
            .logErrorOnRestart(false) //是否必须重新堆栈堆栈跟踪 default: true
            .trackActivities(true) //是否必须跟踪用户访问的活动及其生命周期调用 default: false
            .minTimeBetweenCrashesMs(2000) //应用程序崩溃之间必须经过的时间 default: 3000
            .restartActivity(MainActivity::class.java) // 重启的activity
//            .errorActivity(ErrorActivity::class.java) //发生错误跳转的activity
            .apply()

        initUtils()

        startService(Intent(this, NotificationCollectorMonitorService::class.java))

        val locale = resources.configuration.locale
        language = locale.language
        LogUtils.e("language: $language")
//        val local = Locale.getDefault().toString()

    }

    private fun initUtils() {
        // 工具类初始化
        Utils.init(this)
        LogUtils.getConfig()
            .setLog2FileSwitch(true)
            .setLogHeadSwitch(true)
            .setBorderSwitch(false) // 日志开关
            .globalTag = "BaseProject"
        // 记录崩溃日志
        CrashUtils.init()
    }

}
